// 包 commonError 定义带上下文信息的错误类型及构造函数
package commonError

import (
    "runtime"
)

// 错误代码常量定义已移至 codes.go 文件中统一管理

// Error 表示包含代码、消息、文件和行号的错误
type Error struct {
    Code     int    `json:"code"`
    Message  string `json:"message"`
    File     string `json:"file"`
    Line     int    `json:"line"`
    RawError error
}

// Error 结构体的 Error 方法实现
// 该方法实现了 error 接口，用于返回错误信息
func (e *Error) Error() string {
	// 直接返回结构体中存储的错误消息
	return e.Message
}

// New Error 结构体的 New 方法，用于创建一个新的错误对象
// 该方法会记录错误发生的文件名和行号，并保存原始错误信息
// 参数:
//   - code: 错误代码
//   - message: 错误信息
//   - err: 原始错误对象
//
// 返回值:
//   - *Error: 返回错误对象的指针
func New(code int, message string, err error) *Error {
	// 获取调用者的文件名和行号信息
	// runtime.Caller(1) 返回调用此函数的程序的文件信息
	// 忽略返回的函数名和程序计数器
	_, file, line, _ := runtime.Caller(1)
	// 返回错误对象的指针
	return &Error{
		Code:     code,
		Message:  message,
		File:     file,
		Line:     line,
		RawError: err,
	}
}
